#include<iostream>
#include<vector>
#include"LockGuard.hpp"
#include<unistd.h>
#include"Thread.hpp"
using namespace ThreadMoudle;
pthread_cond_t gcond=PTHREAD_MUTEX_INITIALIZER;
int tickets=10000;
void route (ThreadDate *td)
{
    while(true)
    {   LockGuard lockguard(td->_lock);
        if(tickets>0)
        {
            usleep(1000);
            printf("who:%s,get a ticket: %d\n",n.c_str(),tickets);
            tickets--;
        }
        else 
        {
           
            break;
        }
       
    }

}
// void route (ThreadDate *td)
// {
//     while(true)
//     {   pthread_mutex_lock(td->_lock);
//         if(tickets>0)
//         {
//             usleep(1000);
//             printf("who:%s,get a ticket: %d\n",n.c_str(),tickets);
//             tickets--;
//         pthread_mutex_unlock(td->_lock);
//         }
//         else 
//         {
//             pthread_mutex_unlock(td->_lock);
//             break;
//         }
       
//     }

// }
// void Print(const std::string &name)
// {
//     int cnt = 1;
//     while (true)
//     {
//         std::cout << name << "is running, cnt: " << cnt++ << std::endl;
//         sleep(1);
//     }  
// }
int main()
{
   pthread_mutex_t mutex;//建立锁
   pthread_mutex_init(&mute,nullptr);//初始化锁
    std::vector<Thread> threads;
    for (int i = 0; i < 10; i++)
    {
        std::string name = "thread-" + std::to_string(i + 1);
        ThreadDate *td=new ThreadDate (name,&mutex);//将所传入参数变量
        threads.emplace_back(name, Print,td);//将变量创立
        sleep(1);
    }

    // 统一启动
    for (auto &thread : threads)
    {
        thread.Start();
    }

    sleep(10);

    // // 统一结束
    // for (auto &thread : threads)
    // {
    //     thread.Stop();
    // }

    // 等待线程等待
    for (auto &thread : threads)
    {
        thread.Join();
    }
   

    return 0;


}